#include "widget.h"
#include "ui_widget.h"
#include "QDebug"
#include "QPushButton"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //自定义信号1绑定1和2处理函数
    connect(this,&Widget::mysig1,this,&Widget::handle1);
    connect(this,&Widget::mysig1,this,&Widget::handle2);
    //自定义信号2绑定2和3处理函数
    connect(this,&Widget::mysig2,this,&Widget::handle2);
    connect(this,&Widget::mysig2,this,&Widget::handle3);
    //自定义信号3绑定1和3处理函数
    connect(this,&Widget::mysig3,this,&Widget::handle1);
    connect(this,&Widget::mysig3,this,&Widget::handle3);

    //lambda表达式连接信号槽
    QPushButton* btn = new QPushButton(this);
    btn->setText("使用lambda槽函数设置标题");
    connect(btn,&QPushButton::clicked,this,[=](){
        this->setWindowTitle("lambad槽函数设置标题");
    });
    cnt = 0;
    connect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle1);

    connect(ui->pushButton_5,&QPushButton::clicked,this,[&](){
        if(cnt == 0)
        {
            //换绑到handle2
            disconnect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle1);
            connect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle2);
            ++cnt;
        }
        else if(cnt == 1)
        {
            //换绑到handle3
            disconnect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle2);
            connect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle3);
            ++cnt;
        }
        else if(cnt == 2)
        {
            //换绑到handle1
            disconnect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle3);
            connect(ui->pushButton_4,&QPushButton::clicked,this,&Widget::handle1);
            cnt = 0;
        }
    });
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handle1()
{
    qDebug()<<"handle1";
}

void Widget::handle2()
{
    qDebug()<<"handle2";
}

void Widget::handle3()
{
    qDebug()<<"handle3";
}


void Widget::on_pushButton_clicked()
{
    emit mysig1(); //触发信号1
}

void Widget::on_pushButton_2_clicked()
{
    emit mysig2(); //触发信号2
}

void Widget::on_pushButton_3_clicked()
{
    emit mysig3(); //触发信号3
}
